現在我們的網頁已經具有相當基本的功能了
但是,有一個很容易發現的問題,
就是瀏覽器並沒有記住使用者的資訊,而造成每一次都要重新登入
帶來我們的新產品--Session
來看看官方怎麼說:
session類別允許你在使用者瀏覽你的網頁時, 保存使用者的"狀態"及紀錄使用者活動。Session類別將每個使用者的session資訊序列化 (並可經過加密)後, 儲存在cookie中。
這正是我們要的保存使用者的狀態和紀錄使用者活動
要使用session前,要先載入(load)
可以直接利用config/autoload.php
$autoload['libraries'] = array('session');
或是直接在檔案中打上
$this->load->library('session');
接著到config/config.php
修改:
$config['sess_expiration'] = 0;
sess_expiration是希望session存在的秒數,設為0的目的是要讓session不會過期,直到瀏覽器關閉
我們要在使用者登入後記住使用者資訊,所以到User.php
底下的login()做修改:
public function login()
{
$check_data = $this->user_model->login($this->input->post('username'));
if($check_data == ""){
echo "Unregister user.";
}
else{
if($check_data->password == $this->input->post('password')){
$data = $check_data;
$this->session->set_userdata($sess_data = array('username' => $data->username));
$this->welcome($data);
}
else{
echo "Password Error!";
}
}
}
將資訊(使用者的username)用session儲存起來
接著來到login.php
登入的介面,新增以下內容:
<?php
$this->load->helper('url');
if(isset($_SESSION['username'])){
redirect('index.php/user/welcome', 'refresh');
}
?>
這段意思就是當使用者有登入過而留下session紀錄時,在登入頁面可以直接重新導向至後續的網頁。
昨天的資料傳遞問題也可以一併解決~
修改welcome()
,把參數拿掉~
public function welcome()
{
$this->load->view('pages/welcome.php');
}
和pages/welcome.php
:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home</title>
</head>
<body>
<h1>Login Success!</h1><br>
<h2>Then what do you want to do?</h2>
<form method=post action="gotoupdate">
<button type="submit">點我進行資訊更改</button>
</form>
</body>
</html>
修改gotoupdate()
:
public function gotoupdate()
{
$check_data = $this->user_model->login($_SESSION['username']);
$data['about'] = $check_data->about;
$data['username'] = $this->input->post('username');
$this->load->view('pages/update.php',$data);
}
接著來測試一下吧~
一樣打開 http://localhost/ci/index.php/
登入之後再回到http://localhost/ci/index.php/
然後再按下登入
就會直接略過登入的步驟而到登入後的介面囉~